#!/usr/bin/env python
import sys
import os
import argparse
from pathlib import Path

def __parse_args():
    parser = argparse.ArgumentParser(prog='my_sync.py'
            , description='简单同步第一层子目录的工具')
    parser.add_argument('-s', '--src'
            , required=False, help='源文件或文件夹，缺省为当前目录', default='.')
    parser.add_argument('-d', '--dst'
            , required=True, help='目标文件夹')
    return parser.parse_args()

def __run_cmd(cmd):
    print(cmd)
    os.system(cmd)

def __sync_file(srcFile, dstDir):
    dstFile = dstDir / srcFile.name
    if dstFile.exists():
        raise Exception(f'目标文件{dstFile}已经存在')
    copyCmd = f'cp {srcFile} {dstFile}'
    __run_cmd(copyCmd)

def __sync_it(target, dstDir):
    '''把target(目录/文件),用rsync复制到dstDir中'''
    cmd = f'rsync -a {target} {dstDir}'
    __run_cmd(cmd)

def __sync(srcDir, dstDir):
    '''检查源目录下的文件和子目录，如果目标文件夹下没有，则进行复制'''
    if srcDir.is_file():
        __sync_file(srcDir, dstDir)
    fs = srcDir.glob('*')
    for f in fs:
        df = dstDir / f.name
        if df.exists():
            continue
        __sync_it(f, dstDir)


def main():
    args = __parse_args()
    srcDir = Path(args.src)
    if not srcDir.exists():
        raise Exception(f'{srcDir} not found')
    dstDir = Path(args.dst)
    if not dstDir.exists():
        raise Exception(f'{dstDir} not found')
    if not dstDir.is_dir():
        raise Exception(f'{dstDir} is not a directory')

    __sync(srcDir, dstDir)

if __name__ == '__main__':
    try:
        main()
    except Exception as e:
        print(e)
        sys.exit(1)
